"""
1. 演示对文件的读取
"""

# 打开文件
import time

f = open("../File/1.txt", "r", encoding="UTF-8")
print(type(f))

# 读取文件 - read()
print(f"读取10个字节的结果：{f.read(3)}")
print(f"read方法读取全部内容的结果是：{f.read()}")

print("-----------------------------------------------")
# 读取文件 - readLines()
# f已经被上面消费完
f1 = open("../File/1.txt", "r", encoding="UTF-8")
lines = f1.readlines()   # 读取文件的全部行，封装到列表中
print(f"lines对象的类型：{type(lines)}")
print(f"lines对象的内容是：{lines}")
print("-----------------------------------------------")

# 读取文件 - readline()
f2 = open("../File/1.txt", "r", encoding="UTF-8")
line1 = f2.readline()
line2 = f2.readline()
line3 = f2.readline()
print(f"第一行数据是：{line1}")
print(f"第二行数据是：{line2}")
print(f"第三行数据是：{line3}")
print("-----------------------------------------------")

# for循环读取文件行
f3 = open("../File/1.txt", "r", encoding="UTF-8")

for line in f3:
    print(f"每一行数据 for是:{line}")
# 文件的关闭
f.close()
print("-----------------------------------------------")

# with open 语法操作文件
with open("../File/1.txt", "r", encoding="UTF-8") as f:
    for line in f:
        print(f"每一行数据 while是：{line}")

print("-----------------------------------------------")

def readFile(name):
    # 打开文件，以读取模式打开
    f = open("../File/%s" % name + ".txt", "r", encoding="UTF-8")
    # 方式1：读取全部内容，通过字符串count方法统计itheima单词数量
    # content = f.read()
    # count = content.count("itheima")
    # print(f"itheima在文件中出现了:{count}次")

    # 方式2：读取内容，一行一行读取
    count = 0  # 使用count变量来累计itheima出现的次数
    for line in f:
        line = line.strip()  # 去除开头和结尾的空格以及换行符
        words = line.split(" ")
        for word in words:
            if word == "itheima":
                count += 1  # 如果单词是itheima，进行数量的累加加1
    # 判断单词出现次数并累计
    print(f"itheima出现的次数是：{count}")
    # 关闭文件
    f.close()

# 读取文件
readFile(1)

print("-----------------------------------------------")


"""
2. 演示文件的写入
"""

# 打开文件，不存在的文件, r, w, a
def writeFile():
    # f = open("D:/test.txt", "w", encoding="UTF-8")
    # # write写入
    # f.write("Hello World!!!")       # 内容写入到内存中
    # # flush刷新
    # # f.flush()                       # 将内存中积攒的内容，写入到硬盘的文件中
    # # close关闭
    # f.close()                       # close方法，内置了flush的功能的
    # 打开一个存在的文件
    f = open("../File/2.txt", "w", encoding="UTF-8")
    # write写入、flush刷新
    f.write("黑马程序员")
    # close关闭
    f.close()

writeFile()

f = open("../File/2.txt", "r", encoding="UTF-8")
lines = f.readlines()   # 读取文件的全部行，封装到列表中
print(f"写入后的对象的内容是：{lines}")
print("-----------------------------------------------")


"""
3. 演示文件的追加写入
"""

def writeAppendFile():
    # 打开文件，不存在的文件
    # f = open("D:/test.txt", "a", encoding="UTF-8")
    # # write写入
    # f.write("黑马程序员")
    # # flush刷新
    # f.flush()
    # # close关闭
    # f.close()
    # 打开一个存在的文件
    f = open("../File/2.txt", "a", encoding="UTF-8")
    # write写入、flush刷新
    f.write("\n月薪过万")
    # close关闭
    f.close()

writeAppendFile()

f = open("../File/2.txt", "r", encoding="UTF-8")
lines = f.readlines()   # 读取文件的全部行，封装到列表中
print(f"追加后的对象的内容是：{lines}")
print("-----------------------------------------------")


def copyFile():
    # 打开文件得到文件对象，准备读取
    fr = open("../File/2.txt", "r", encoding="UTF-8")
    # 打开文件得到文件对象，准备写入
    fw = open("../File/3.txt", "w", encoding="UTF-8")
    # for循环读取文件
    for line in fr:
        line = line.strip()
        # 判断内容，将满足的内容写出
        if line.split(",")[0] == "测试":
            continue        # continue进入下一次循环，这一次后面的内容就跳过了
        # 将内容写出去
        fw.write(line)
        # 由于前面对内容进行了strip()的操作，所以要手动的写出换行符
        fw.write("\n")

    # close2个文件对象
    fr.close()
    fw.close()      # 写出文件调用close()会自动flush()

# 文件备份
copyFile()

f = open("../File/3.txt", "r", encoding="UTF-8")
lines = f.readlines()   # 读取文件的全部行，封装到列表中
print(f"复制出来的对象的内容是：{lines}")
print("-----------------------------------------------")
